<?php

/**
 * Diese Klasse repräsentiert den Return Wert eines .php includes.
 * 
 * @author mills
 *
 */
class Ret {
	
	// name der tpl
	private $template;
	
	// die Daten
	private $data;
	
	/**
	 * Dieser Konstruktor entscheidet  anhand der Anzahl der Parameter, 
	 * welcher 'Sub'-Konstruktor ausgeführt werden muss und übergibt diesem
	 * die entsprechenden Parameter
	 */
	function __construct() {
		// Die Argumente werden ausgelesen
		$args = func_get_args();
		// Die Anzahl der Argumente wird ermittelt
		$num_args = count($args);
		// Wenn zwischen 0 und 3 Argumente übergeben wurden,
		// dann wird einer der folgenden Konstruktoren aufgerufen
		if ($num_args > 0 and $num_args < 4) {
			
			// debug
			Logger::getInstance()->logFile("Calling: ". '__construct_'.$num_args.'('.implode(",", $args) .')', LEVEL_DEBUG);
				
			call_user_func_array(array($this, '__construct_'.$num_args), $args);
		}
	}
	
	/**
	 * Dieser 'Sub'-Konstruktor setzt das benötigte template und das benötigte stylesheet
	 * 
	 * @param string $template
	 * @param string $stylesheet
	 * @param string $javascript
	 */
	function __construct_3($template, $stylesheet, $javascript) {
		$this->template = $template;
		HolderFactory::getInstance('Javascript')->add_javascript($javascript);
		HolderFactory::getInstance('Stylesheet')->add_stylesheet($stylesheet);
	}
	
	/**
	 * Dieser 'Sub'-Konstruktor setzt das benötigte template und das benötigte stylesheet
	 * 
	 * @param string $template
	 * @param string $stylesheet
	 */
	function __construct_2($template, $stylesheet) {
		$this->template = $template;
		HolderFactory::getInstance('Stylesheet')->add_stylesheet($stylesheet);
	}
	
	/**
	 * Dieser Sub-Konstruktor setzt den übergebenen error
	 * 
	 * @param string $error
	 */
	function __construct_1($error) {
		$this->add_error($error);
	}
	
	/**
	 * Gibt das benötigte template zurück, wenn diese Information gesetzt ist,
	 * sonst null
	 */
	function get_template() {
		return isset($this->template) ? $this->template : null;
	}
	
	/**
	 * Gibt die Stylesheets zurück
	 */
	function get_stylesheet() {
		return HolderFactory::getInstance('Stylesheet')->get_stylesheets();
	}
	
	/**
	 * Gibt das Javascript array zurück
	 */
	function get_javascript() {
		return HolderFactory::getInstance('Javascript')->get_javascripts();
	}
	
	/**
	 * Gibt alle entstandenen errors zurück
	 */
	function get_error() {
		return HolderFactory::getInstance('Error')->get_errors();
	}
	
	/**
	 * Gibt alle Infomeldungen zurück
	 */
	function get_info() {
		return HolderFactory::getInstance('Info')->get_infos();
	}
	
	/**
	 * Gibt die Daten zurück, wenn diese gesetzt sind,
	 * sonst null
	 */
	function get_data() {
		return isset($this->data) ? $this->data : null;
	}
	
	/**
	 * Diese Funktion schreibt daten in das data Array. wenn ein key mehrfach verwendet wird,
	 * dann werden die vorherigen daten überschrieben
	 * 
	 * @param string $key
	 * @param any $value
	 */
	function add_data($key, $value) {
		if (!isset($this->data)) {
			$this->data = array();
		}
		
		$this->data[$key] = $value;
	}
	
	/**
	 * Setzt das gewünschte template
	 * @param string $template
	 */
	function set_template($template) {
		$this->template = $template;
	}
	
	/**
	 * Fügt dem StylesheetHolder das gewünschte Stylesheet hinzu
	 * @param string $stylesheet
	 */
	function add_stylesheet($stylesheet) {
		HolderFactory::getInstance('Stylesheet')->add_stylesheet($stylesheet);
	}
	
	/**
	 * Fügt dem javascriptHolder die gewünschte javascript hinzu
	 * @param string $javascript
	 */
	function add_javascript($javascript) {
		HolderFactory::getInstance('Javascript')->add_javascript($javascript);
	}
	
	/**
	 * Fügt dem jQuerySnippetHolder das gewünschte jQuerySnippet hinzu
	 * @param string $jquerysnippet
	 */
	function add_jquerysnippet($jquerysnippet) {
		HolderFactory::getInstance('JQuerySnippet')->add_snippet($jquerysnippet);
	}
	
	/**
	 * Fügt den entstandenen error dem errorholder hinzu
	 * @param string $error
	 */
	function add_error($error) {
		HolderFactory::getInstance('Error')->add_error($error);
	}
	
	/**
	 * Fügt die zu übermittelnde info dem infoholder
	 * @param string $info
	 */
	function add_info($info) {
		HolderFactory::getInstance('Info')->add_info($info);
	}
	
	function remove_stylesheet($stylesheet) {
		HolderFactory::getInstance('Stylesheet')->remove_stylesheet($stylesheet);
	}
	
	function remove_javascript($javascript) {
		HolderFactory::getInstance('Javascript')->remove_javascript($javascript);
	}
	
	function drop_template() {
		unset($this->template);
	}
	
	function __destruct() {
		unset($this->data);
	}
}

?>